home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / DJGPP / LGP250S1.ZIP / src / libgplus.5 / libgplus / tests / tillist.cc < prev    next >
C/C++ Source or Header  |  1993-05-21  |  5KB  |  247 lines

  1. #include <_G_config.h>
  2.  
  3. #ifdef _G_NO_TEMPLATESS
  4.  
  5. main()
  6. {
  7.     fprintf(stderr, "(template-based classes not available)\n");
  8.     return 0;
  9. }
  10. #else
  11.  
  12. /*
  13.  test/demo of linked structures
  14. */
  15.  
  16.  
  17. #include <assert.h>
  18.  
  19. #define tassert(ex) {if ((ex)) cerr << #ex << "\n"; \
  20.                        else _assert(#ex, __FILE__,__LINE__); }
  21.  
  22. #include <iostream.h>
  23. #include "SLList.h"
  24. #include "DLList.h"
  25.  
  26. void printlist(SLList<int>& l)
  27. {
  28.   for (Pix p = l.first(); p != 0; l.next(p)) cout << l(p) << " ";
  29.   cout << "\n";
  30. }
  31.  
  32.  
  33. void SLtest()
  34. {
  35.   int i;
  36.   SLList<int> a;
  37.   assert(a.OK());
  38.   assert(a.empty());
  39.   cout << "prepending...\n";
  40.   for (i = 0; i < 10; ++i)
  41.   {
  42.     assert(a.length() == i);
  43.     a.prepend(i);
  44.     assert(a.front() == i);
  45.   }
  46.   cout << "a: "; printlist(a);
  47.   cout << "appending...\n";
  48.   for (i = 0; i < 10; ++i)
  49.   {
  50.     assert(a.length() == 10 + i);
  51.     a.append(i);
  52.     assert(a.rear() == i);
  53.   }
  54.   cout << "a: "; printlist(a);
  55.   SLList<int> b = a;
  56.   cout << "b = a: " << "\n"; printlist(b);
  57.   assert(b.OK());
  58.   assert(b.length() == a.length());
  59.   assert(b.front() == a.front());
  60.   assert(b.rear() == a.rear());
  61.   cout << "remove_front of first 10 elements:\n";
  62.   for (i = 0; i < 10; ++i) 
  63.   {
  64.     assert(b.length() == 20 - i);
  65.     assert(b.front() == 9 - i);
  66.     b.remove_front();
  67.   }
  68.   assert(b.length() == 10);
  69.   cout << "b: "; printlist(b);
  70.  
  71.   cout << "inserting 100 after sixth element...\n";
  72.   Pix bp = b.first();
  73.   for (i = 0; i < 5; ++i) b.next(bp);
  74.   b.ins_after(bp, 100);
  75.   assert(b.length() == 11);
  76.   cout << "b: "; printlist(b);
  77.   a.join(b);
  78.   cout << "after a.join(b)\n"; printlist(a);
  79.   assert(b.empty());
  80.   assert(a.length() == 31);
  81.   cout << "b: " << "\n"; printlist(b);
  82.   b.prepend(999);
  83.   cout << "b: " << "\n"; printlist(b);
  84.   assert(b.length() == 1);
  85.   assert(b.front() == 999);
  86.   assert(b.rear() == 999);
  87.   assert(b.OK());
  88.   SLList<int> bb = b;
  89.   cout << "bb: " << "\n"; printlist(bb);
  90.   assert(bb.OK());
  91.   assert(bb.length() == 1);
  92.   assert(bb.front() == 999);
  93.   assert(bb.rear() == 999);
  94.   assert(bb.remove_front() == 999);
  95.   b.prepend(1234);
  96.   assert(b.length() == 2);
  97.   b.del_after(b.first());
  98.   assert(b.rear() == 1234);
  99.   assert(b.length() == 1);
  100.   b.del_after(0);
  101.   assert(b.length() == 0);
  102.  
  103.   assert(a.OK());
  104.   assert(b.OK());
  105.   assert(bb.OK());
  106. }
  107.  
  108. void printDlist(DLList<int>& l)
  109. {
  110.   for (Pix p = l.first(); p != 0; l.next(p)) cout << l(p) << " ";
  111.   cout << "\n";
  112. }
  113.  
  114. void DLtest()
  115. {
  116.   int i;
  117.   DLList<int> a;
  118.   assert(a.OK());
  119.   assert(a.empty());
  120.   assert(a.length() == 0);
  121.   cout << "prepending...\n";
  122.   for (i = 0; i < 10; ++i)
  123.   {
  124.     assert(a.length() == i);
  125.     a.prepend(i);
  126.     assert(a.front() == i);
  127.   }
  128.   cout << "a: " << "\n"; printDlist(a);
  129.   cout << "appending...\n";
  130.   for (i = 0; i < 10; ++i)
  131.   {
  132.     assert(a.length() == 10 + i);
  133.     a.append(i);
  134.     assert(a.rear() == i);
  135.   }
  136.   cout << "a: "; printDlist(a);
  137.   DLList<int> b = a;
  138.   assert(b.OK());
  139.   assert(b.length() == a.length());
  140.   assert(b.front() == a.front());
  141.   assert(b.rear() == a.rear());
  142.   cout << "b = a: "; printDlist(b);
  143.   cout << "remove_front of first 10 elements:\n";
  144.   for (i = 0; i < 10; ++i) 
  145.   {
  146.     assert(b.length() == 20 - i);
  147.     assert(b.front() == 9 - i);
  148.     b.remove_front();
  149.   }
  150.   assert(b.length() == 10);
  151.   cout << "b: "; printDlist(b);
  152.  
  153.   cout << "inserting 100 after sixth element...\n";
  154.   Pix bp = b.first();
  155.   for (i = 0; i < 5; ++i) b.next(bp);
  156.   b.ins_after(bp, 100);
  157.   assert(b.length() == 11);
  158.   cout << "b: "; printDlist(b);
  159.   DLList<int> aa = a;
  160.   aa.join(b);
  161.   cout << "after aa = a; aa.join(b)\n"; printDlist(aa);
  162.   assert(aa.length() == 31);
  163.   assert(b.empty());
  164.   cout << "b: " << "\n"; printDlist(b);
  165.   b.prepend(999);
  166.   cout << "b: " << "\n"; printDlist(b);
  167.   assert(b.length() == 1);
  168.   assert(b.front() == 999);
  169.   assert(b.rear() == 999);
  170.   assert(b.OK());
  171.   DLList<int> bb = b;
  172.   cout << "bb: " << "\n"; printDlist(bb);
  173.   assert(bb.OK());
  174.   assert(bb.length() == 1);
  175.   assert(bb.front() == 999);
  176.   assert(bb.rear() == 999);
  177.   assert(bb.remove_front() == 999);
  178.   assert(bb.OK());
  179.   b.prepend(1234);
  180.   assert(b.length() == 2);
  181.   bp = b.first();
  182.   b.next(bp);
  183.   b.del(bp, -1);
  184.   assert(b.rear() == 1234);
  185.   assert(b.length() == 1);
  186.   b.del(bp);
  187.   assert(b.length() == 0);
  188.  
  189.   DLList<int> z = a;
  190.   cout << "z = a: "; printDlist(z);
  191.   assert(z.OK());
  192.   assert(z.length() == 20);
  193.   cout << "remove_rear of last 10 elements:\n";
  194.   for (i = 0; i < 10; ++i) 
  195.   {
  196.     assert(z.length() == 20 - i);
  197.     assert(z.rear() == 9 - i);
  198.     z.remove_rear();
  199.   }
  200.   assert(z.length() == 10);
  201.  
  202.   cout << "z: "; printDlist(z);
  203.  
  204.   cout << "inserting 100 before alternate elements...\n";
  205.   for (Pix zp = z.first(); zp; z.next(zp))
  206.   {
  207.     z.ins_before(zp, 100);
  208.   }
  209.   assert(z.length() == 20);
  210.   cout << "z: "; printDlist(z);
  211.  
  212.   cout << "inserting 200 after sixth element...\n";
  213.   zp = z.first();
  214.   for (i = 0; i < 5; ++i) z.next(zp);
  215.   z.ins_after(zp, 200);
  216.   assert(z.length() == 21);
  217.   cout << "z: "; printDlist(z);
  218.  
  219.   cout << "deleting alternate elements of z...";
  220.   for (zp = z.first(); zp; z.next(zp))
  221.   {
  222.     cout << z(zp) << " ";
  223.     z.del(zp);
  224.   }
  225.   cout << "\n";
  226.   assert(z.length() == 10);
  227.   cout << "z: "; printDlist(z);
  228.   
  229.   cout << "z in reverse order:\n";
  230.   for (zp = z.last(); zp; z.prev(zp)) cout << z(zp) << " ";
  231.   cout << "\n";
  232.   z.clear();
  233.   assert(z.OK());
  234.   assert(z.empty());
  235.   assert(a.OK());
  236.   assert(b.OK());
  237. }
  238.  
  239. main()
  240. {
  241.   SLtest();
  242.   DLtest();
  243.   cout << "\nEnd of test\n";
  244.   return 0;
  245. }
  246. #endif
  247.